package com.sw.c.controller;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.InputStream;

public class ExcelReader {

    public static void main(String[] args) throws Exception {
        int num = 4; // 指定行号
        String name = "教基7181";
        String sheetName = "";
        StringBuilder rowData = new StringBuilder();

        // 获取 Excel 文件输入流
        InputStream fileInputStream = ExcelReader.class.getClassLoader().getResourceAsStream("file/教委.xlsx");
        if (fileInputStream == null) {
            System.out.println("文件未找到！");
            return;
        }

        // 读取工作簿
        Workbook workbook = new XSSFWorkbook(fileInputStream);

        // 遍历工作簿中的每个 sheet
        for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
            Sheet sheet = workbook.getSheetAt(sheetIndex);
            sheetName = sheet.getSheetName();
            if (!sheetName.equals(name)) {
                continue;
            }

            // 检查是否有指定的行号
            Row row = sheet.getRow(num - 1); // 传入的 num 是从 1 开始的，所以需要减 1

            if (row != null) {
                rowData.setLength(0); // 清空之前的行数据

                // 获取该行的所有单元格
                for (Cell cell : row) {
                    String cellValue = getCellValue(cell, sheet);
                    rowData.append(cellValue).append(",");
                }

                // 输出当前 sheet 页的名称和指定行的拼接结果
                System.out.println("Sheet名称: " + sheetName);
                System.out.println("指定行 " + num + " 的拼接后的字符串: " + rowData.toString());
            } else {
                System.out.println("第 " + num + " 行在 Sheet " + sheetName + " 中不存在。");
            }
        }

        // 关闭工作簿和文件输入流
        workbook.close();
        fileInputStream.close();
    }

    private static String getCellValue(Cell cell, Sheet sheet) {
        // 获取合并单元格的区域
        int numMergedRegions = sheet.getNumMergedRegions();

        // 遍历所有合并单元格区域
        for (int i = 0; i < numMergedRegions; i++) {
            CellRangeAddress mergedRegion = sheet.getMergedRegion(i);

            // 判断当前单元格是否在合并区域内
            if (mergedRegion.isInRange(cell.getRowIndex(), cell.getColumnIndex())) {
                // 找到合并区域内第一个不为空的单元格
                for (int rowIndex = mergedRegion.getFirstRow(); rowIndex <= mergedRegion.getLastRow(); rowIndex++) {
                    for (int colIndex = mergedRegion.getFirstColumn(); colIndex <= mergedRegion.getLastColumn(); colIndex++) {
                        Cell mergedCell = sheet.getRow(rowIndex).getCell(colIndex);
                        if (mergedCell != null && !mergedCell.toString().isEmpty()) {
                            return mergedCell.toString(); // 返回第一个非空的单元格值
                        }
                    }
                }
            }
        }

        // 如果单元格不是合并单元格的一部分，直接返回单元格的值
        return cell.toString();
    }



/*    // 获取单元格的值，如果该单元格是合并单元格的一部分，返回合并区域第一个单元格的值
    private static String getCellValue(Cell cell, Sheet sheet) {
        // 获取合并单元格的区域
        int numMergedRegions = sheet.getNumMergedRegions();

        // 遍历所有合并单元格区域
        for (int i = 0; i < numMergedRegions; i++) {
            CellRangeAddress mergedRegion = sheet.getMergedRegion(i);

            // 判断当前单元格是否在合并区域内
            if (mergedRegion.isInRange(cell.getRowIndex(), cell.getColumnIndex())) {
                // 如果是合并单元格的第一个单元格，则获取其值
                if (mergedRegion.getFirstRow() == cell.getRowIndex() && mergedRegion.getFirstColumn() == cell.getColumnIndex()) {
                    return cell.toString(); // 返回合并区域第一个单元格的值
                } else {
                    return ""; // 不是合并区域的第一个单元格，返回空字符串
                }
            }
        }

        // 如果单元格不是合并单元格的一部分，直接返回单元格的值
        return cell.toString();
    }*/
}
